

using System;
using System.Text;

using NHibernate;
using NHibernate.Cfg;
using NHibernate.Criterion;
using NHibernate.Exceptions;

using NuevoGenNHibernate.EN.Ebay;
using NuevoGenNHibernate.CAD.Ebay;

namespace NuevoGenNHibernate.CEN.Ebay
{
public partial class PujaCEN
{
private IPujaCAD _IPujaCAD;

public PujaCEN(IPujaCAD _IPujaCAD)
{
        this._IPujaCAD = _IPujaCAD;
}

public IPujaCAD get_IPujaCAD ()
{
        return this._IPujaCAD;
}

public int CrearPuja (float p_precio, Nullable<DateTime> p_fecha, string p_pujador, int p_subasta)
{
    SubastaCAD subasta = new SubastaCAD();
    SubastaCEN CENsubasta = new SubastaCEN(subasta);

    VentaCAD venta = new VentaCAD();
    VentaEN ENventa = new VentaEN();
    VentaCEN CENventa = new VentaCEN(venta);

    ENventa = venta.ReadOID(p_subasta);

    //CUERPO DE DIAGRAMA DE SECUENCIA
        PujaEN pujaEN = null;
        int oid = -1;
        bool correcto = true, final = false;;

        CENsubasta.ComprobarPuja(p_subasta, p_precio);

        if (correcto)
        {
            final = CENsubasta.ComprobarFechaFin(p_subasta);

            if (!final)
            {
                CENsubasta.AvisoSobrePuja(p_pujador, p_subasta);

                //Initialized PujaEN
                pujaEN = new PujaEN();
                pujaEN.Precio = p_precio;

                pujaEN.Fecha = p_fecha;


                if (p_pujador != null)
                {
                    pujaEN.Pujador = new NuevoGenNHibernate.EN.Ebay.UsuarioEN();
                    pujaEN.Pujador.Nick = p_pujador;
                }


                if (p_subasta != -1)
                {
                    pujaEN.Subasta = new NuevoGenNHibernate.EN.Ebay.SubastaEN();
                    pujaEN.Subasta.Id_venta = p_subasta;
                }

                //Call to PujaCAD

                oid = _IPujaCAD.CrearPuja(pujaEN);
            }
            if (final)
            {
                CENventa.RealizarPago(ENventa.Id_venta, ENventa.FormaDePago, ENventa.Fecha, ENventa.PrecioFinal, ENventa.GastosEnvio, ENventa.Vendedor.Nick, ENventa.Usuario.Nick, ENventa.Finalizado);
            }
        }
        return oid;
    //FIN CUERPO
}

public void EliminarPuja (int id_puja)
{
        _IPujaCAD.EliminarPuja (id_puja);
}

public PujaEN ReadOID (int id_puja)
{
        PujaEN pujaEN = null;

        pujaEN = _IPujaCAD.ReadOID (id_puja);
        return pujaEN;
}

public System.Collections.Generic.IList<PujaEN> ReadAll (int first, int size)
{
        System.Collections.Generic.IList<PujaEN> list = null;

        list = _IPujaCAD.ReadAll (first, size);
        return list;
}
}
}
